(defmacro defined [& var]
    `(try 
        (or 
            (boolean (resolve ~@var)) 
            (not (nil? (eval ~@var)))
        ) (catch Exception e# false)
    )
)

(println "getString")
(if (defined 'getString)
	(throw (Exception. "getString already defined!"))
)
(def getString putString)
(def getStringType (class getString))
(println getStringType)
(println getString)
(if-not (= getStringType String)
	(throw (Exception. "getString not String!"))
)

(println "getStringWithNull")
(if (defined 'getStringWithNull)
	(throw (Exception. "getStringWithNull already defined!"))
)
(def getStringWithNull putStringWithNull)
(def getStringWithNullType (class getStringWithNull))
(println getStringWithNullType)
(println getStringWithNull)
(if-not (nil? getStringWithNull)
	(throw (Exception. "getStringWithNull not null!"))
)

(println "getStringVector")
(if (defined 'getStringVector)
	(throw (Exception. "getStringVector already defined!"))
)
(def getStringVector putStringVector)
(def getStringVectorType (class (get getStringVector 0)))
(println getStringVectorType)
(println getStringVector)
(if-not (= getStringVectorType String)
	(throw (Exception. "getStringVector not String!"))
)

(println "getStringVectorWithNull")
(if (defined 'getStringVectorWithNull)
	(throw (Exception. "getStringVectorWithNull already defined!"))
)
(def getStringVectorWithNull putStringVectorWithNull)
(def getStringVectorWithNullType (class (get getStringVectorWithNull 0)))
(println getStringVectorWithNullType)
(println getStringVectorWithNull)
(if-not (= getStringVectorWithNullType String)
	(throw (Exception. "getStringVectorWithNull not String!"))
)
(if-not (nil? (get getStringVectorWithNull 1))
	(throw (Exception. "getStringVectorWithNull[1] not null!"))
)

(println "getStringVectorAsList")
(if (defined 'getStringVectorAsList)
	(throw (Exception. "getStringVectorAsList already defined!"))
)
(def getStringVectorAsList putStringVectorAsList)
(def getStringVectorAsListType (class (get getStringVectorAsList 0)))
(println getStringVectorAsListType)
(println getStringVectorAsList)
(if-not (= getStringVectorAsListType String)
	(throw (Exception. "getStringVectorAsList not String!"))
)

(println "getStringVectorAsListWithNull")
(if (defined 'getStringVectorAsListWithNull)
	(throw (Exception. "getStringVectorAsListWithNull already defined!"))
)
(def getStringVectorAsListWithNull putStringVectorAsListWithNull)
(def getStringVectorAsListWithNullType (class (get getStringVectorAsListWithNull 0)))
(println getStringVectorAsListWithNullType)
(println getStringVectorAsListWithNull)
(if-not (= getStringVectorAsListWithNullType String)
	(throw (Exception. "getStringVectorAsListWithNull not String!"))
)
(if-not (nil? (get getStringVectorAsListWithNull 1))
	(throw (Exception. "getStringVectorAsListWithNull[1] not null!"))
)

(println "getStringMatrix")
(if (defined 'getStringMatrix)
	(throw (Exception. "getStringMatrix already defined!"))
)
(def getStringMatrix putStringMatrix)
(def getStringMatrixType (class (get (get getStringMatrix 0) 0)))
(println getStringMatrixType)
(println getStringMatrix)
(if-not (= getStringMatrixType String)
	(throw (Exception. "getStringMatrix not String!"))
)

(println "getStringMatrixWithNull")
(if (defined 'getStringMatrixWithNull)
	(throw (Exception. "getStringMatrixWithNull already defined!"))
)
(def getStringMatrixWithNull putStringMatrixWithNull)
(def getStringMatrixWithNullType (class (get (get getStringMatrixWithNull 0) 1)))
(println getStringMatrixWithNullType)
(println getStringMatrixWithNull)
(if-not (= getStringMatrixWithNullType String)
	(throw (Exception. "getStringMatrixWithNull not String!"))
)
(if-not (nil? (get (get getStringMatrixWithNull 0) 0))
	(throw (Exception. "getStringMatrixWithNull[0][0] not null!"))
)
(if-not (nil? (get (get getStringMatrixWithNull 1) 1))
	(throw (Exception. "getStringMatrixWithNull[1][1] not null!"))
)
(if-not (nil? (get (get getStringMatrixWithNull 2) 2))
	(throw (Exception. "getStringMatrixWithNull[2][2] not null!"))
)

(println "getStringMatrixAsList")
(if (defined 'getStringMatrixAsList)
	(throw (Exception. "getStringMatrixAsList already defined!"))
)
(def getStringMatrixAsList putStringMatrixAsList)
(def getStringMatrixAsListType (class (get (get getStringMatrixAsList 0) 0)))
(println getStringMatrixAsListType)
(println getStringMatrixAsList)
(if-not (= getStringMatrixAsListType String)
	(throw (Exception. "getStringMatrixAsList not String!"))
)

(println "getStringMatrixAsListWithNull")
(if (defined 'getStringMatrixAsListWithNull)
	(throw (Exception. "getStringMatrixAsListWithNull already defined!"))
)
(def getStringMatrixAsListWithNull putStringMatrixAsListWithNull)
(def getStringMatrixAsListWithNullType (class (get (get getStringMatrixAsListWithNull 0) 1)))
(println getStringMatrixAsListWithNullType)
(println getStringMatrixAsListWithNull)
(if-not (= getStringMatrixAsListWithNullType String)
	(throw (Exception. "getStringMatrixAsListWithNull not String!"))
)
(if-not (nil? (get (get getStringMatrixAsListWithNull 0) 0))
	(throw (Exception. "getStringMatrixAsListWithNull[0][0] not null!"))
)
(if-not (nil? (get (get getStringMatrixAsListWithNull 1) 1))
	(throw (Exception. "getStringMatrixAsListWithNull[1][1] not null!"))
)
(if-not (nil? (get (get getStringMatrixAsListWithNull 2) 2))
	(throw (Exception. "getStringMatrixAsListWithNull[2][2] not null!"))
)
